#include "RBTree.hpp"

namespace zty{
template <class K>
  class set{
    struct SetKofT{
      const K& operator()(const K &k)
      {
        return k;
      }
    };
    typedef RBTree<K, K, SetKofT> RBT;
    RBT _rbt;

  public:
    typedef typename RBT::iterator iterator; 
    typedef typename RBT::const_iterator const_iterator; 

    template <class InputIterator>
      set(InputIterator first, InputIterator last){
        while(first!=last)
        {
          _rbt.Insert(*first);
          ++first;
        }
      }

    iterator begin(){
      return _rbt.begin();
    } 

    iterator end(){
      return _rbt.end();
    }

    const_iterator begin() const{
      return _rbt.begin();
    }

    const_iterator end() const{
      return _rbt.end();
    }

    std::pair<iterator, bool> insert(const K& k){
      return _rbt.insert(k);
    }

    iterator find(const K& k){
      return _rbt.Find(k);
    }
  };
}
